2011年02月26日
川俣晶の縁側ソフトウェア技術雑記 total 4429 count

コンパイラは本当に不可欠なのか?

Written By: 川俣 晶連絡先

コンパイラとデバッガの違いより

- 欠かせないのがコンパイラ

- 有りがたいのがデバッガ

「けっこう衝撃的だった」

「え? どうして? コンパイラは欠かせないし、デバッガは有り難いだろ?」

「よく考えてくれ。本当にコンパイラは欠かせないか?」

「えーと、ああ、言いたいことが分かったぞ。コンパイラではなくてもインタプリタでもいいんだ」

「違う」

「じゃあ、アセンブラ」

「違う違う」

「何が言いたいのさ」

「おいらの感覚で言うと、まず基本はハンドアセンブルなんだ」

「ええっ!?」

「コンパイラもインタプリタもアセンブラも存在しなくても、別に紙の上にニモニック書いて命令表見て16進コードに手動で翻訳してそれを打ち込めば済む話。単に効率が悪いだけ」

「それは発想が行きすぎだろう。屁理屈って奴だ」

「最近、屁理屈でごねる奴は多いが、そういう話ではない」

「屁理屈じゃないって言うの?」

「そうだ。1970年代のマイコンの時代は、ハンドアセンブルが基本中の基本だったのだ。みんなやっていた当たり前の開発スタイルなのだ。それを屁理屈だというのなら、当時の我々にアセンブラを与えてくれ。もちろんRAM256バイトのミニマム構成のマイコンでも動く奴をだぜ。いや、6810等を使えば128バイトメモリのマイコンも可能か」

「アセンブラはなかったの?」

「日立のH68/TRというマイコンには装備されて画期的だったが、比較的後期の製品だ」

「そうか」

「あるいは大ヒットしたTK-80にもアセンブラで開発するというスタイルが無かったわけではない。ただし、高価な開発マシンが別途必要で、ホビイストに手が出る世界ではない」

「そうか」

「あと、LKIT-16も一応アセンブラみたいな機能はあったはずだ」

「数えるほどしかないし、完全なアセンブラも少ないのだね」

「そうだ。おいらも初期はハンドアセンブルしていた」

「そういうリアル体験があればこそ、『欠かせないのがコンパイラ』という感覚がないわけだね」

「コンパイラやインタプリタやアセンブラが何も無いのが過去のある時点でのリアルだ。そして、効率を度外視すればいつでも戻れる世界とも言える。というか全く新しいシステムを作ると最初は何も無いから、いつでもご対面できる状況でもある」

「そこが今時の世代と決定的に感性が違う部分ということだね」

「そうだ。コンパイラがないからプログラム書けません、なんていうのは子供っぽい我が儘にしか聞こえない」

「それは屁理屈じゃなくて、実際にコンパイラが無い状態でプログラムを書いた実績が言わせるんだね」

「それがある種の世代のリアリティだ」

デバッガは有り難いか? §

「では、『有りがたいのがデバッガ』という要素は肯定するのだね?」

「いやいや」

「えっ? 有り難くないの?」

「そうだ」

「どうして?」

「デバッガなんてあっても動かない世界が当たり前だった時代も長いからだ」

「どういうこと?」

「今でこそ、メモリが潤沢だからデバッガを動作させるゆとりは簡単に得られる」

「うん」

「ところが、昔はメモリの制限が厳しくてアプリもぎりぎりで動いていたんだ」

「メモリ拡張すればいいじゃん」

「できなかったんだよ。上限として64Kとか640Kとか、そういう制約がアーキテクチャ的に課せられていたんだ」

「バンク切り替えとかEMSとかあったじゃない」

「プログラムで自由に使えるわけではない。専用のポートやAPI経由でしか使えない」

「じゃあ、実際はどうだったの?」

「まずたいていの場合、デバッグが必要なアプリとデバッガはメモリの都合上。共存できなかった時代がある」

「ならば小さなアプリならデバッグできたんだろ?」

「そうじゃない。画面が基本的に1つしかないからアプリの出力をデバッガの出力が破壊していくことになる」

「ひぇ~」

「バグを取るどころではない。デバッガを一緒に使うと画面出力の流れが追えなくなることも珍しくなかったのだよ」

「画面を2つにすれば良かったじゃん」

「ビデオカードを2枚挿してデバッグするという方法が無かったわけじゃない。実際に、CodeViewで2モニタデバッグやったことはあるが、そのために専用のシステムを組んでいく必要があった。今と違って、そんなに簡単に2モニタにはできなかったのだ」

「じゃあ君の実感は『有りがたいのがデバッガ』ではない?」

「そうさ。今でこそ確かに有り難いだろうが、昔は『有りがたいと自称しているが実際は飾りでしかないのがデバッガ』という感覚だったよ」

「じゃあ、デバッガは役立たず?」

「いやいや。けっこう使ったぞ。debugとかsymdebとか」

「じゃあ役に立ってるじゃん」

「ファイルにパッチを当てるときに便利だったのであって、デバッグには使ってないけどな」

「ぎゃふん」

結論 §

「では君の結論はなんだい? 以下の主張は間違いということかい?」

- 欠かせないのがコンパイラ

- 有りがたいのがデバッガ

「いや、そうじゃない。間違っているとは言わない。個人の感じ方はその個人次第だ」

「そこまで言っていいの?」

「デバッガが有りがたかったという経験しか無いなら、素直に有りがたいという印象を受け取るだろう」

「じゃあ、問題は無いわけ?」

「いや、そうじゃない。問題はあるのだ」

「えっ? 話の意味が分からないよ」

「誰でも自分の印象を持つことができる」

「うん」

「でもよく考えてくれ。『誰でも自分の印象を持つことができる』ということは、隣にいる別の誰かも彼なりの印象を持つことができるのだ。そして、2人の印象が同じだという保障はどこにもない」

「あれ?」

「だからさ。誰であろうと自分で自分の印象を持っていい訳だ。でも、隣の別の人に、自分と同じ印象を持っているはずだという前提で話すと問題がこじれる可能性がある」

「そうか。デバッガが有りがたくない世界に生きている人が相手なら、違う印象が残っているかも知れないものね」

「実際、今でも組み込み系などではデバッガがほとんど意味を持たない世界もあるだろう。ハード的な制約でね」

「では、君としてはどうしたら良いと思うのだい?」

「他人は自分のクローンじゃない、ということを常に意識して他人と接するべきだろうな。まあ本来なら当たり前のことだけどな」